This invention relates generally to web services and, more specifically, relates to management and recovery of multi-service web transactions.
This section is intended to provide a background or context to the invention disclosed below. The description herein may include concepts that could be pursued, but are not necessarily ones that have been previously conceived, implemented or described. Therefore, unless otherwise explicitly indicated herein, what is described in this section is not prior art to the description in this application and is not admitted to be prior art by inclusion in this section.
It is becoming increasingly more common that web-service implementation involves multiple serial and parallel calls to other web-services. This is especially true with micro-service architectures and calls to persistence services such as, IBM's CLOUDANT for example. These web-services calls can be successful, can fail due to client error (e.g. HTTP 400 error) or server error (e.g. HTTP 500 error), or can go into an unknown state due to timeout, in which case the call could have succeeded or failed.
Typically, web-services are written in a manner that assumes that if something goes awry in a sequence of web-service invocations, then there is no need to undo partial work that was created by successful execution of some of the web-service invocations. This assumption can be incorrect, leaving the web-services in an incorrect state that can affect subsequent interactions.